﻿using Pe.Petecos.Comercial.Aplicacion.Core.Base;
using Pe.Petecos.Comercial.Aplicacion.Core.ServiceContract;
using Pe.Petecos.Comercial.Aplicacion.Service.Base;
using Pe.Petecos.Comercial.Aplicacion.TransferObject.Correo;
using Pe.Petecos.Comercial.Cross.Core.Exception;
using Pe.Petecos.Comercial.Infraestructura.Core.Contract.Correo;
using Pe.Petecos.Comercial.Infraestructura.Model.Correo;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Pe.Petecos.Comercial.Aplicacion.Service.Implements
{
    /// <summary>
    /// Servicio de aplicación Correo
    /// </summary>
    /// <remarks>
    /// Creación:   GMD 25082015 <br />
    /// Modificación:            <br />
    /// </remarks>
    public class CorreoService : GenericService, ICorreoService
    {
        /// <summary>
        /// Repositorio de Envio de Correos
        /// </summary>
        public ICorreoLogicProxy correoLogicProxy { get; set; }
        /// <summary>
        /// Realiza el envio de Correo a Demanda
        /// </summary>
        /// <param name="filtro">Configuracion del correo a Enviar</param>
        /// <returns>Conformidad de ejecución</returns>
        public ProcessResult<string> Enviar(DataEmail dataEmail)
        {
            ProcessResult<string> result = new ProcessResult<string>();

            try
            {
                var emailLogic = new EmailLogic();
                foreach (DataDirecciones item in dataEmail.Para)
                {
                    emailLogic.Para.Add(new DireccionesLogic() { Email = item.Email, NombreCompleto = item.NombreCompleto });
                }

                foreach (DataDirecciones item in dataEmail.ConCopia)
                {
                    emailLogic.ConCopia.Add(new DireccionesLogic() { Email = item.Email, NombreCompleto = item.NombreCompleto });
                }

                foreach (DataAdjuntos item in dataEmail.Adjuntos)
                {
                    emailLogic.Adjuntos.Add(new AdjuntosLogic() { Archivo = item.Archivo, NombreArchivo = item.NombreArchivo });
                }
                emailLogic.Asunto = dataEmail.Asunto;
                emailLogic.Mensaje = dataEmail.Mensaje;

                result.IsSuccess = correoLogicProxy.Enviar(emailLogic);
            }
            catch (Exception e)
            {
                result.IsSuccess = false;
                result.Exception = new ApplicationLayerException<CorreoService>(e);
            }

            return result;
        }
    }
}
